//////////////////////////////////////////////////////////////////////////////
//	Filename:			IGameState.h
//
//	Date Created:		8/27/2011
//	File Creator:		Steven Broyles
//
//	Last Modified:		8/27/2011
//	Modifier Initials:	SB
//
//	Description:		This is the base interface for all states in the game.
//
//	Stipulations:		This class is pure virtual, and all functinos need to
//						be overridden by the child objects.
//////////////////////////////////////////////////////////////////////////////
#ifndef IGAMESTATE_H_
#define IGAMESTATE_H_

class IGameState
{
private:

public:
	////////////////////////////////////////////////////////////
	//	Name:				Enter
	//
	//	Description:		Used to start a state up. All initialization
	//						should be done in here.
	//
	//	Ins:				void
	//	
	//	Outs:				void
	//
	//	Returns:			void
	//
	//	Last Modified:		8/27/2011
	//	Modifier Initials:	SB
	//
	//	Known Bugs:			none
	////////////////////////////////////////////////////////////
	virtual void Enter(  ) = 0;

	////////////////////////////////////////////////////////////
	//	Name:				Input
	//
	//	Description:		Used to detect and handle input in this state.
	//
	//	Ins:				void
	//	
	//	Outs:				void
	//
	//	Returns:			bool
	//
	//	Last Modified:		8/27/2011
	//	Modifier Initials:	SB
	//
	//	Known Bugs:			none
	////////////////////////////////////////////////////////////
	virtual bool Input(  ) = 0;

	////////////////////////////////////////////////////////////
	//	Name:				Update
	//
	//	Description:		Used to update the currently running state.
	//
	//	Ins:				fdeltaTime
	//	
	//	Outs:				void
	//
	//	Returns:			void
	//
	//	Last Modified:		8/27/2011
	//	Modifier Initials:	SB
	//
	//	Known Bugs:			none
	////////////////////////////////////////////////////////////
	virtual void Update( float _fdeltaTime ) = 0;

	////////////////////////////////////////////////////////////
	//	Name:				Render
	//
	//	Description:		Renders the current state.
	//
	//	Ins:				void
	//	
	//	Outs:				void
	//
	//	Returns:			void
	//
	//	Last Modified:		8/27/2011
	//	Modifier Initials:	SB
	//
	//	Known Bugs:			none
	////////////////////////////////////////////////////////////
	virtual void Render(  ) = 0;

	////////////////////////////////////////////////////////////
	//	Name:				Exit
	//
	//	Description:		Exits the current state.
	//
	//	Ins:				void
	//	
	//	Outs:				void
	//
	//	Returns:			void
	//
	//	Last Modified:		8/27/2011
	//	Modifier Initials:	SB
	//
	//	Known Bugs:			none
	////////////////////////////////////////////////////////////
	virtual void Exit(  ) = 0;

	////////////////////////////////////////////////////////////
	//	Name:				Destructor
	//
	//	Description:		virtual destructor for the base state
	//
	//	Ins:				void
	//	
	//	Outs:				void
	//
	//	Returns:			N/A
	//
	//	Last Modified:		8/27/2011
	//	Modifier Initials:	SB
	//
	//	Known Bugs:			none
	////////////////////////////////////////////////////////////
	virtual ~IGameState(  ) {  };

};
#endif //IGAMESTATE_H_